Testing Local-First Software
Testing software becomes much harder in a local-first setting, because it is insufficient to test good/bad results of operations in isolation, but one must also consider concurrent execution of other operations. Moreover, for many local-first applications, it is not even clear what a “correct” result is. For example, if two users concurrently add three new item each on their shared shopping list, which of the possible resulting lists are correct?
A promising strategy is “property based testing”, where developers define abstract properties that should always be true (such as “the shopping list should contain each added item but no duplicates”), while the testing system automatically generates example executions and then checks the defined properties. However, for effective testing, the generated example executions should exercise many potential problems, which is still a mostly unsolved problem.